//
// Created by Castle-Moriarty on 2025/10/31.
//

#include <iostream>
using namespace std;


int main() {
    // 指针
    int *p1,*p2;
    double dp,*dp2;

    int ival = 10;
    int *pp = &ival; // 获得ival的内存地址，给指针pp

    int i = 10;
    int &iref = i;  // 定义了i的引用 iref
    int *ipt = &i;
    ipt = &ival;
    cout << ipt << endl;

    double deval = 12.2;
    double *pd = &deval;
    double *pd2 = pd;

    // 利用指针访问对象
    int val = 42;
    int *p = &val;  // 取地址 让指针指向对象
    cout << *p << endl; // 输出42，解引用

    *p=10;  // 对指针赋值，实际上是对指针指向的对象赋值
    cout << *p << "," << val << endl; // 输出10,10

    // 定义空指针
    int *k = nullptr;

    // 指向指针的指针
    // 通过星号(*)的多少可以区分指针的级别


    // 指向指针的引用
    int x = 34;
    int *y; // y是int型指针
    int *&r = y; // r是对指针y的引用


    int arr[5] ={1,2,3,4,5};
    int *arrPtr = arr; // arrPtr 指向数组的第一个元素
    int thirdElement = *(arrPtr + 2);   // 获取数组的第三个元素


    return 0;
}